Skip to content

二、MSVC + Visual Studio(Windows)

环境要求: Visual Studio 2019+,MSVC 编译工具链,x64 架构。

重要: SDK 与编译器的 ABI 必须匹配。MSVC 编译的库与 MinGW 编译的库不能混用。下载 SDK 时请选择 MSVC 版本。

2.1 创建项目

选择 C++ 控制台应用 创建,命名为 cpp_demo

在 Visual Studio 的创建新项目向导中选择 C++ 控制台应用模板

2.2 导入 SDK

将 SDK 文件拷贝到项目目录:

text
项目根目录/
├── libs/
│   ├── include/
│   │   ├── c_interface/
│   │   ├── cpp_interface/
│   │   └── parameter/
│   ├── nrc_host.lib          # MSVC 导入库
│   └── nrc_host.dll          # 运行时动态库
├── cpp_demo.cpp
└── cpp_demo.vcxproj

2.3 配置 Visual Studio

左键项目 → 属性 (Properties),按以下步骤配置:

(1) 添加头文件路径

Configuration Properties → C/C++ → 常规 → 附加包含目录

text
$(ProjectDir)libs\include

(2) 添加库路径

Configuration Properties → 链接器 → 常规 → 附加库目录

text
$(ProjectDir)libs

(3) 链接库文件

Configuration Properties → 链接器 → 输入 → 附加依赖项

text
nrc_host.lib

(4) 生成后自动复制 DLL

Configuration Properties → 生成事件 → 生成后事件 → 命令行

text
copy "$(ProjectDir)libs\nrc_host.dll" "$(OutDir)"

2.4 编写最小连接代码

(1) 修改 nrc_api.h 头文件包含路径

由于 SDK 默认的 nrc_api.h 中引用的头文件路径是相对于 cpp_interface/ 目录的,而 Visual Studio 项目的附加包含目录配置为 libs\include,因此需要修改 libs\include\cpp_interface\nrc_api.h 文件的内容,将其中引用的头文件路径改为相对于 cpp_interface/ 目录的形式:

cpp
#ifndef INCLUDE_CPP_INTERFACE_NRC_API_H_
#define INCLUDE_CPP_INTERFACE_NRC_API_H_

#include "nrc_craft_conveyor_belt_track.h"
#include "nrc_craft_vision.h"
#include "nrc_craft_weld.h"
#include "nrc_interface.h"
#include "nrc_io.h"
#include "nrc_job_operate.h"
#include "nrc_modbus.h"
#include "nrc_queue_operate.h"
#include "nrc_track.h"
#include "nrc_dual_arm.h"

#endif /* INCLUDE_API_NRC_API_H_ */

提示: 确保每个 #include 都直接使用文件名,不带额外的路径前缀,因为这些头文件都与 nrc_api.h 位于同一 cpp_interface/ 目录下。

(2) 修改 cpp_interface/ 下头文件对 parameter/ 目录的引用路径

nrc_api.h 所包含的各个头文件(如 nrc_craft_conveyor_belt_track.hnrc_interface.h 等)内部还会引用 parameter/ 目录下的头文件。由于这些头文件位于 cpp_interface/ 目录下,需要使用相对路径 ../parameter/ 来定位 parameter/ 目录。

nrc_craft_conveyor_belt_track.h 为例,将其内部的头文件引用修改为如下形式:

cpp
#ifndef INCLUDE_CPP_INTERFACE_NRC_CRAFT_CONVEYOR_BELT_TRACK_H_
#define INCLUDE_CPP_INTERFACE_NRC_CRAFT_CONVEYOR_BELT_TRACK_H_

#include "../parameter/nrc_define.h"
#include "../parameter/nrc_craft_conveyor_belt_track_parameter.h"

......

提示: 需要对 cpp_interface/ 目录下所有头文件逐一检查,凡是引用了 parameter/ 目录下头文件的地方,都要统一使用 ../parameter/xxx.h 的相对路径格式。常见的被引用文件包括 nrc_define.h、各类 *_parameter.h 等。

(3) 编写连接测试代码

cpp
#include <iostream>
#include <windows.h>
#include "libs/include/cpp_interface/nrc_api.h"

int main()
{
    // 1. 连接控制器
    SOCKETFD fd = connect_robot("192.168.1.15", "6001");
    if (fd <= 0) {
        std::cout << "连接失败,请检查 IP 和端口" << std::endl;
        return 1;
    }

    // 2. 等待连接就绪
    while (get_connection_status(fd) != 0) {
        Sleep(200);
    }

    std::cout << "连接成功!fd = " << fd << std::endl;
    std::cout << "SDK 版本: " << get_library_version() << std::endl;

    // 3. 断开连接
    disconnect_robot(fd);
    return 0;
}

2.5 编译运行

选择 Release x64 配置,点击"本地 Windows 调试器"。控制台输出 "连接成功" 即表示配置正确。

在 Visual Studio 工具栏中将解决方案配置切换为 Release 并启动本地 Windows 调试器

如果使用 Debug 版本的库,需将配置切换为 Debug x64。

下一步

完成连接测试后,请浏览接口示例了解更多 API 用法。